/**
 * 中介者模式
 */
//  定义一个中介对象来封装一系列对象之间的交互，使原有对象之间的耦合松散，且可以独立地改变它们之间的交互。

//  当类与类之间的关系呈现网状时，引入一个中介者，可以使类与类之间的关系变成星形。将每个类与多个类的耦合关系简化为每个类与中介者的耦合关系。
// 玩家类
class Player {
    // 初始资金 100 元
    money = 100;
    group: Group;
    constructor(group: Group) {
        this.group = group;
    }
    change(money: number) {
        // 输钱的人扣减相应的钱
        this.group.money -= money;
        // 自己的余额增加
        this.money += money;
    }
}
class Group {
    money: number = 0;
}
const group = new Group();
const player1 = new Player(group);
const player2 = new Player(group);
const player3 = new Player(group);
const player4 = new Player(group);
// player1 赢了 5 元
player1.change(5);
// player2 赢了 20 元
player2.change(20);
// player3 输了 12 元
player3.change(-12);
// player4 输了 3 元
player4.change(-3);

// 输出：四人剩余的钱：105,120,88,97
console.log(
    '四人剩余的钱：' + player1.money + ',' + player2.money + ',' + player3.money + ',' + player4.money
);
// 总而言之，中介者模式就是用于将类与类之间的 多对多关系 简化成 多对一、一对多关系 的设计模式

// 中介者模式的缺点也很明显：由于它将所有的职责都移到了中介者类中，
// 也就是说中介类需要处理所有类之间的协调工作，这可能会使中介者演变成一个超级类。所以使用中介者模式时需要权衡利弊。
